"---------------------------------------
" A CONFIGURER selon environnnement 
"---------------------------------------

" les réglages suivants concernent ctags et le plugin Taglist
" qui permettant de naviguer plus facilement dans le code source.

" L'emplacement de notre fichier ctags pour naviguer
" dans le code source du projet en cours
" set tags+=~/.vim/mytags/eaf.tags

" le plugin taglist doit connaitre l'emplacement du binaire ctags pour
" fonctionner
let Tlist_Ctags_Cmd='/usr/bin/ctags'

"--------------------------------------
" GENERAL
"-------------------------------------

" non-compatible avec vi. Permet de pousser plus loin la configuration
set nocompatible

" on s'assure d'avoir le droit à au moins 256 couleurs
set t_Co=256

" jeu de couleur par défaut pour vim
" pour le jeu de couleur de gvim, voir gvimrc
colorscheme mustang

" Essaie éviter que certains fichiers s'affichent avec des ^M
" à la place des sauts de lignes
" ne semble pas amrcher :-/
set fileformats=unix,dos

" souris désactivée par défaut
set mouse=

" encoder en utf-8 les fichiers
set encoding=utf-8

" Set filetype detection on, load plugins 
" je ne sais pas pourquoi, mais si je mets pas indent
" ici, les commentaires doxygen php fonctionne moins bien
filetype indent plugin on

" remplacement des tabs par deux espaces pour drupal
set expandtab
set tabstop=2
set softtabstop=2
set shiftwidth=2

" indentation intelligente
set autoindent

" ne sait pas trop ce que ça fait, à n'activer que si autoindent ne suffit pas
" car semble interférer éventuellement avec l'autoindent qui s'adapte normalement
" au type de fichier
" set smartindent

" la touche leader est normalement \ mais c'est trop pénible sur un clavier azerty
:let mapleader = ";"

" montrer les numéros de lignes
set nu

" illuminer les résultat de recherche
set hlsearch

"retour à la ligne des lignes trop longues
"set wrap

" boucler sur le fichier pour naviguer dans les résultat de la recherche
set wrapscan

" ignorer la casse pour les recherches
set ignorecase

"... mais si on cherche en majuscule, donner la priorité aux mots en majuscules
set smartcase

" éviter les copier coller foireux niveau indentation...
" set paste

" les swap files me cassent les c*****
set noswapfile

" Drupal command group, set the correct filetypes for Drupal files.
" On s'assure que tous les fichiers de drupal soit bien reconnus
" comment étant du php malgré leurs extensions exotiques
" le .drupal est une astuce pour aller chercher les snippets
" de snipMate dans le dossier 'drupal' OU dans un fichier drupal.snippets
augroup drupal
  autocmd BufRead,BufNewFile *.module set filetype=php.drupal
  autocmd BufRead,BufNewFile *.theme set filetype=php.drupal
  autocmd BufRead,BufNewFile *.inc set filetype=php.drupal
  autocmd BufRead,BufNewFile *.install set filetype=php.drupal
  autocmd BufRead,BufNewFile *.engine set filetype=php.drupal
  autocmd BufRead,BufNewFile *.profile set filetype=php.drupal
  autocmd BufRead,BufNewFile *.test set filetype=php.drupal
  autocmd BufRead,BufNewFile *.php set filetype=php.drupal
augroup END

" activer l'omnicompletion pour tous les langages
set omnifunc=syntaxcomplete#Complete

" commentaires doxygen pour php
set syntax=php.doxygen

" utiliser le compilateur php pour pouvoir vérifier la syntaxe
set makeprg=php

" permet d'enregistrer automatiquement quand on fait un :make et sur certaines autres actions
set autowrite

"illuminer le html dans les strings php
" let php_htmlInStrings=1

" Toujours laisser des lignes visibles (içi 5) au dessus/en dessous du curseur quand on
" atteint le début ou la fin de l'écran :
set scrolloff=3

"------------------------
" MAPPING / RACCOURCIS
"------------------------

" mappping pour déclencher la vérification de syntaxe php
map <C-P> :make %<CR>

" changer le chemin courant au fichier ouvert dans vim
nmap <silent> <Leader>cd :cd%:h<CR>

" raccourci pour buffer suivant
nmap <silent> <Leader>;b <esc>:bn<CR>

" F2 pour sauter à la définition de la fonction (grace à ctags)
noremap <F2> <C-w>]
inoremap <F2> <Esc><C-w>]

" F3 pour inclure un de nos snippets personnels
" qu'on doit chercher dans .vim/mysnippets
noremap <F3> :r ~/.vim/mysnippets/
inoremap <F3> <Esc>:r ~/.vim/mysnippets/

"F4 pour remettre à égalité toutes les fenêtre
noremap <F4> <C-w>=
inoremap <F4> <esc><C-w>=

"F5 pour maximiser une fenêtre
noremap <F5> <C-W>\|<C-w>_
inoremap <F5> <Esc><C-W>\|<C-w>_

" F6 Insert current date.
map <F6> :r !date<CR>

" F7 pour lancer la recherche avec fuzzyfinder
noremap <F7> :FufFile<CR> 
inoremap <esc><F7> :FufFile<CR> 

"<F8> MRU : mots recents files
noremap <F8> :MRU<CR> 
inoremap <esc><F8> :MRU<CR> 

" F9 lancer l'explorateur de fichier NERDTree
noremap <F9> :NERDTreeToggle<CR>

"F12 Switch on/off de la fenêtre du plugin TagList
nnoremap <silent> <F12> :TlistToggle<CR>

" L'omnicompletion va à  la fois chercher dans les fonctions du langages utilisé 
" ET dans les fonction trouvés dans le fichiers de tags
inoremap <C-f> <C-x><C-o>

"------------------------
" PLUGIN TAGLIST
"------------------------

" afficher la liste de tags dans le menu de GVIM
let Tlist_Show_Menu=1

" n'afficher les tags que pour le fichier courant
let Tlist_Show_One_File=1

" afficher la fenêtre de taglist dans une barre à droite
let Tlist_Use_Right_Window=1

" les noms de fonctions de drupal peuvent être loooooooooooooongs.
let Tlist_WinWidth=50

" n'afficher que les constantes, les classes et les fonctions. 
" Les variables prennent de la place et ne me servent à rien
let tlist_php_settings = 'php;d:Constantes;c:Classes;f:Fonctions'

"------------------------
" PLUGIN NERD TREE
"------------------------

" positionner automatiquement gvim dans le répertoire root de NerdTree
" Ca signifie que :!ls affichera la liste de ce répertoire
let NERDTreeChDirMode=2

" Montrer les marques pages en haut de l'explorateur de fichiers 
let NERDTreeShowBookmarks=1

" ranger nos bookmarks dans notre dossier .vim personnel 
" sans le 'expand', ça ne semble pas marcher.
let NERDTreeBookmarksFile=expand("$HOME/.vim/NERDTreeBookmarks")

"------------------------
" PLUGIN PHP-DOC 
"------------------------

" ctrl-p pour commenter une fonction php
" inoremap <C-P> <ESC>:call PhpDocSingle()<CR>i
" nnoremap <C-P> :call PhpDocSingle()<CR>
" vnoremap <C-P> :call PhpDocRange()<CR> 

"------------------------
" PLUGIN FUZZYFINDER 
"------------------------

" noremap <silent> <C-]> :FufTagWithCursorWord!<CR>

"-------------------------
" FOLDING
"--------------------------

" pouvoir utiliser la navigation par folding en php
" let php_folding=1

" ajout des + dépliables à la souris dans la colonne qui contient les numéros
" de lignes
" set foldcolumn=1

" modifier le text qui apparait sur les folds
" je ne sais pas ce que fait ce truc mais il enleve le nombre de ligne qui apparait
" normalement avant le nom de la fonction, qui est une information qui ne me sert à rien modifier le text qui apparait sur les folds
" je ne sais pas ce que fait ce truc mais il enleve le nombre de ligne qui apparait
" normalement avant le nom de la fonction, qui est une information qui ne me sert à rien
" set foldtext=v:folddashes.substitute(getline(v:foldstart),'/\\*\\\|\\*/\\\|{{{\\d\\=','','g')

"-------------------------
" AUTRES
"--------------------------

" on s'assure d'avoir un colorsheme spécifique pour les diff, pour qu'ils soient bien lisible
" on doit reindiquer notre colorscheme pour qu'on puisse y revenir quand on quitte le diff
" au FilterWritePost * if &diff | colorscheme vimdiff | else | colorscheme vimdiff | endif
" au BufWinLeave * colorscheme bclear
